package com.kerrykidz.scmstock.service;

import java.util.HashMap;
import java.util.List;

import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmStgAdjEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmStgadjPrdEntity;
import com.kerrykidz.system.vo.UserInfo;
import com.kerrykidz.workflow.vo.WorkflowParamVo;
import com.rdp.framework.exception.RDPException;

public interface IStockCorrectService {

	/**
	 * 库存调整分页
	 * 
	 * @param startSearchTime
	 *            起始时间
	 * @param endSearchTime
	 *            结束时间
	 * @param scmStgAdj
	 * @return
	 * @throws RDPException
	 */
	ScmStgAdjEntity findScmStgAdj(String startSearchTime, String endSearchTime,
			ScmStgAdjEntity scmStgAdj, String userId) throws RDPException;

	/**
	 * 列出库存调整单信息
	 * 
	 * @return
	 * @throws RDPException
	 */
	List<ScmStgAdjEntity> findScmStgAdj(ScmStgAdjEntity scmStgAdj)
			throws RDPException;

	/**
	 * 获得最新的盘点单号
	 * 
	 * @return 盘点单号
	 * @throws RDPException
	 */
	String getNewestTake() throws RDPException;

	/**
	 * 插入库存调整单
	 * 
	 * @param scmStgAdj
	 * @throws RDPException
	 */
	void insertScmStgAdj(ScmStgAdjEntity scmStgAdj) throws RDPException;

	/**
	 * 库存调整清单保存
	 * 
	 * @param scmStgadjPrd
	 * @throws RDPException
	 */
	void insertScmStgadjPrd(ScmStgadjPrdEntity scmStgadjPrd)
			throws RDPException;

	/**
	 * 库存调整清单保存
	 * 
	 * @param scmStgadjPrd
	 * @throws RDPException
	 */
	String saveScmStgadjPrds(String contents, ScmStgAdjEntity scmStgAdj)
			throws RDPException;

	/**
	 * 库存调整清单提交
	 * 
	 * @param contents
	 * @param scmStgAdj
	 * @return
	 * @throws RDPException
	 */
	String submitScmStgadjPrds(String contents, ScmStgAdjEntity scmStgAdj,
			UserInfo user) throws RDPException;

	/**
	 * 库存调整
	 * 
	 * @param scmStgAdj
	 * @throws RDPException
	 */
	String updateScmStgAdj(ScmStgAdjEntity scmStgAdj) throws RDPException;

	/**
	 * 根据库存调整单号查询已调整的商品
	 * 
	 * @param fkStgadjId
	 * @return
	 * @throws RDPException
	 */
	List<ScmStgadjPrdEntity> findScmStgadjPrd(String fkStgadjId)
			throws RDPException;

	/**
	 * 获得已经调整的商品
	 * 
	 * @param fkStgadjId
	 * @param fkBranId
	 * @return
	 * @throws RDPException
	 */
	public List<GblScmPrdEntity> getSavedCorrectPrds(String fkStgadjId,
			String fkBranId) throws RDPException;

	/**
	 * 更新调整商品
	 * 
	 * @param scmStgadjPrd
	 * @throws RDPException
	 */
	void updateScmStgadjPrd(ScmStgadjPrdEntity scmStgadjPrd)
			throws RDPException;

	/**
	 * 库存调整-草稿-编辑
	 * 
	 * @param contents
	 *            添加或需要更新的调整商品信息
	 * @param scmStgAdj
	 *            操作的库存调整单
	 * @param isSubmit
	 *            是否是提交 true 提交 false 保存
	 * @param user
	 * @param prdMap
	 *            判断商品时候已经保存过
	 * @return
	 * @throws RDPException
	 */
	public String saveScmStgadjPrdsForEdit(WorkflowParamVo workflowparam,String contents,
			ScmStgAdjEntity scmStgAdj, String isSubmit, UserInfo user,
			HashMap<String, String> prdMap) throws RDPException;

	/**
	 * 通过id查询库存调整单,和申请流程历史
	 * 
	 * @param pkStgadjId
	 * @return
	 * @throws RDPException
	 */
	ScmStgAdjEntity findScmStgAdjById(String pkStgadjId, String userId)
			throws RDPException;

	/**
	 * 处理任务
	 * 
	 * @param workflowparam
	 * @throws RDPException
	 */
	public void completeStockCorrect(WorkflowParamVo workflowparam,
			String fkBranId, String modiBy)
			throws RDPException;

	/**
	 * 根据调整单号和商品号删除调整清单项
	 * 
	 * @param scmStgadjPrd
	 * @throws RDPException
	 */
	void delScmStgadjPrd(ScmStgadjPrdEntity scmStgadjPrd) throws RDPException;
}
